home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Cream of the Crop 1
/
Cream of the Crop 1.iso
/
EDUCATE
/
SATEQ74.ARJ
/
SATEQ.BAS
< prev
next >
Wrap
BASIC Source File
|
1990-09-05
|
40KB
|
838 lines
10 '**** SATAUS Programm von OE1HSI VERSION 7.4E 4.APRIL 1990
20 '**** VERSION MIT MEMSTORAGE DER MAP UND SATKEPN.DAT,HELLGRÜN
30 '**** MIT DRUCKERTEST hsi version **** ohne LOGO, >32k orbits
40 '**** MA 256 hinzugefügt 11/88, ESC 0,0 bereinigt,<D> enhanced
50 ' ** QUICKBASIC COMPILER PROBLEM CIRCUMVENTED with DIVISION**
60 'F10 Auswahl SINGLE DISPLAY REPETITION, Defproblems removed
70 ON ERROR GOTO 10020
80 OPEN "SATKEPN.DAT" FOR INPUT AS #1: CLOSE 'TEST FILE PRESENCE
90 OPEN "SATBODN.DAT" FOR INPUT AS #1: CLOSE
100 OPEN "SATMAP.DAT" FOR INPUT AS #1: CLOSE
110 CLEAR
120 DEFDBL H, N, T: DEFINT J: OPTION BASE 1
130 '**** defs *****
140 DIM T$(20), S$(40), CC(3, 2), GG3(20)
150 DIM C(3, 2), Y1(20), G3(20), SAT(6), SATL(20, 2), K0(20), N0(20), A0(20), F1(20), I$(20)
160 DIM PKT(6), KEP(6), E0(20), M0(20), Y3(20), W0(20), T0(20), I0(20), O0(20)
170 DIM WLT(3000)
180 KEY OFF: SCREEN 0, 1: WIDTH 80: COLOR 14, 1, 0: CLS : PRINT : PRINT 'CLEAR
190 ON ERROR GOTO 10000
200 KEY(9) OFF: KEY(10) OFF: KEY(8) OFF: KEY(7) OFF
210 GOSUB 6120
220 COLOR 10, 4: LOCATE 3, 20: PRINT " SELECT ONE of the FOLLOWING ": COLOR 14, 1
230 LOCATE 7, 20: PRINT "<P> Prediction for ONE satellite"
240 LOCATE 9, 20: PRINT "<R> Realtime tracking of satellites GRAPH or TABLE"
250 LOCATE 11, 20: PRINT "<U> Update/add/delete satellite elements"
260 LOCATE 13, 20: PRINT "<G> change/enter Groundstation data"
270 COLOR 12, 1, 0: LOCATE 15, 20: PRINT "<Esc> RETURN TO DOS": COLOR 14, 1, 1
280 GOSUB 9500
290 LOCATE 19, 20, 0, 0, 7: COLOR 10, 4: PRINT " SELECT <P,R,U,G,Esc>--> "; : COLOR 30: PRINT STRING$(2, 176):
300 Z$ = "PpRrUuGg" + CHR$(27)
310 K$ = INKEY$: IF K$ = "" THEN 310
320 COLOR 14, 1, 0: LOCATE 12, 60: PRINT SPACE$(2): K = INSTR(Z$, K$)
330 ON K GOTO 6000, 6000, 3500, 3500, 400, 400, 2500, 2500, 350, 350
340 GOSUB 9510: COLOR 28, 1, 0: GOTO 280
350 CLOSE : CLS : END
400 ' ****** SATFILE.BAS enhanced 12/88 ***********
410 KEY OFF: SCREEN 0, 1: WIDTH 80: COLOR 14, 1, 0: CLS
420 GOSUB 6120
430 OPEN "SATKEPN.DAT" FOR RANDOM AS #1 LEN = 56
440 FIELD #1, 10 AS I$, 2 AS Y3$, 8 AS T0$, 4 AS I0$, 4 AS O0$, 4 AS E0$, 4 AS W0$, 4 AS M0$, 8 AS N0$, 4 AS K0$, 4 AS F1$
450 V1$ = "": COLOR 14, 1, 0
460 LOCATE 2, 16
470 PRINT "ELEMENTS of the following SATELLITES are AVAILABLE:"
480 FOR J% = 1 TO 20: GET #1, J%
490 IF ASC(I$) < 33 THEN 510 ELSE IF ASC(I$) > 90 THEN 510
500 LOCATE (J% + 2), 10: PRINT I$: NEXT
510 LOCATE 7, 35: PRINT "(A) Add a satellite"
520 LOCATE 8, 35: PRINT "(D) Delete a satellite"
530 LOCATE 9, 35: PRINT "(C) Change elements"
540 LOCATE 10, 35: PRINT "(L) List satellite elements"
550 LOCATE 11, 35: PRINT "(R) Return to MAIN MENU"
560 LOCATE 12, 35: PRINT "select <A,D,C,L,R> -->"
570 LOCATE 12, 61: COLOR 30: PRINT STRING$(2, 176)
580 Z$ = "RrAaCcDdLl"
590 K$ = INKEY$: IF K$ = "" THEN 590
600 COLOR 14, 1, 0: LOCATE 12, 61: PRINT SPACE$(2)
610 K = INSTR(Z$, K$)
620 ON K GOTO 1900, 1900, 660, 660, 710, 710, 880, 880, 670, 670
630 GOSUB 9510: GOTO 570
640 '
650 ' ****** ADD A NEW RECORD ******
660 GOSUB 1110: GOSUB 1730: GOSUB 1360: GOSUB 1400: GOTO 1020
670 ' ****** list A RECORD ******
680 GOSUB 1920: CLS : GOTO 450
690 '
700 ' ****** CHANGE AN EXISTING RECORD ******
710 GOSUB 1050:
720 IF I$ <> U$ THEN
730 CLS : LOCATE 16, 35: PRINT "SATELLITE not found"
740 LOCATE 18, 35: PRINT "TRY ONCE MORE": GOSUB 9510
750 GOTO 450
760 END IF
770 GOSUB 1190
780 PRINT "CHANGE ELEMENTS OF THIS SATELLITE ? (Y/N) "
790 Z$ = "YyNn"
800 K$ = INKEY$: IF K$ = "" THEN 800
810 K = INSTR(Z$, K$)
820 ON K GOTO 840, 840, 850, 850
830 GOSUB 9510: GOTO 800
840 CLS : GOSUB 1410: GOTO 1020
850 CLS : GOTO 450
860 '
870 ' ****** DELETE AN EXISTING RECORD ******
880 GOSUB 1050
890 IF I$ <> U$ THEN
900 CLS : LOCATE 16, 35: PRINT "SATELLITE not found"
910 LOCATE 18, 35: PRINT "TRY ONCE MORE": GOSUB 9510
920 GOTO 450
930 END IF
940 COLOR 28: LOCATE 22, 25: PRINT "DELETE, are YOU sure ?? (Y/N) "; : COLOR 14
950 Z$ = "YyNn"
960 K$ = INKEY$: IF K$ = "" THEN 960
970 K = INSTR(Z$, K$)
980 ON K GOTO 1010, 1010, 1000, 1000
990 GOSUB 9510: GOTO 960
1000 CLS : GOTO 450
1010 GOSUB 1360: GOSUB 1610: GOSUB 1670
1020 LOCATE 18, 31: COLOR 10, 4: PRINT "CHANGES are filed ": SLEEP 3: GOTO 450
1030 '
1040 ' ****** FIND SATELLITE RECORD ******
1050 LOCATE 14, 35: INPUT "WHICH SATELLITE ? "; V1$
1060 IF V1$ = "" THEN
1070 CLS : LOCATE 16, 35: PRINT "NONAME, try again"
1080 LOCATE 18, 35: PRINT "TRY ONCE MORE": GOSUB 9510
1090 GOTO 450
1100 END IF
1110 U$ = SPACE$(10): V1$ = UCASE$(V1$): LSET U$ = V1$
1120 FOR J% = 1 TO 20: GET #1, J%
1130 IF I$ = U$ THEN 1160 ELSE IF ASC(I$) < 33 THEN 1160 ELSE IF ASC(I$) > 90 THEN 1160
1140 IF LEFT$(I$, 1) = "" THEN 1160
1150 NEXT
1160 RETURN
1170 '
1180 ' ****** DISPLAY SATELLITE RECORD ******
1190 CLS : Y3 = CVI(Y3$)
1200 T0 = CVD(T0$): I0 = CVS(I0$): O0 = CVS(O0$): E0 = CVS(E0$): W0 = CVS(W0$)
1210 M0 = CVS(M0$): N0 = CVD(N0$): K0 = CVS(K0$): F1 = CVS(F1$)
1220 PRINT "Satellite = "; I$
1230 PRINT "Epoch year = "; Y3
1240 PRINT "Epoch day = "; T0
1250 PRINT "Inclination = "; I0
1260 PRINT "R.A.A.N. = "; O0
1270 PRINT "Eccentricity = "; E0
1280 PRINT "Arg. of perigee = "; W0
1290 PRINT "Mean anomaly = "; M0
1300 PRINT "Mean motion = "; N0
1310 PRINT "Epoch orbit no. = "; K0
1320 PRINT "Beacon Frequ. = "; F1
1330 PRINT : RETURN
1340 '
1350 ' ****** SETUP SATELLITE ELEMENTS FOR DELETE ACTION ******
1360 Q$ = SPACE$(10): Y3 = 0: T0 = 0: I0 = 0: O0 = 0: E0 = 0: W0 = 0: M0 = 0: N0 = 0: K0 = 0: F1 = 0
1370 CLS : RETURN
1380 '
1390 ' ****** UPDATE/DELETE SATELLITE ELEMENTS ******
1400 PRINT : PRINT "New SATELLITE. Enter following DATA:": PRINT : GOTO 1420
1410 COLOR 12: LOCATE 2, 26: PRINT "ENTER NEW DATA or "; CHR$(17) + CHR$(196) + CHR$(217); " for unchanged DATA ": COLOR 14
1420 INPUT ; "SATELLITE DESIGNATION = ", U$: IF U$ <> "" THEN Q$ = U$: PRINT : ELSE Q$ = I$: PRINT Q$
1430 Q$ = UCASE$(Q$)
1440 INPUT ; "EPOCH YEAR (YY) = ", U$: IF U$ <> "" THEN Y3 = VAL(U$): PRINT : ELSE PRINT Y3
1450 INPUT ; "EPOCH DAY (DD.DDDD-) = ", U$: IF U$ <> "" THEN T0 = VAL(U$): PRINT : ELSE PRINT USING "###.########"; T0
1460 INPUT ; "INCLINATION (DEG.) = ", U$: IF U$ <> "" THEN I0 = VAL(U$): PRINT : ELSE PRINT USING "###.####"; I0
1470 INPUT ; "R.A.A.N. (DEG.) = ", U$: IF U$ <> "" THEN O0 = VAL(U$): PRINT : ELSE PRINT USING "###.####"; O0
1480 INPUT ; "ECCENTRICITY = ", U$: IF U$ <> "" THEN E0 = VAL(U$): PRINT : ELSE PRINT USING ".#######"; E0
1490 INPUT ; "ARG. OF PERIGEE (DEG.) = ", U$: IF U$ <> "" THEN W0 = VAL(U$): PRINT : ELSE PRINT USING "###.####"; W0
1500 INPUT ; "MEAN ANOMALY (DEG.) = ", U$: IF U$ <> "" THEN M0 = VAL(U$): PRINT : ELSE PRINT USING "###.####"; M0
1510 INPUT ; "MEAN MOTION (ORB/DAY) = ", U$: IF U$ <> "" THEN N0 = VAL(U$): PRINT : ELSE PRINT USING "###.########"; N0
1520 INPUT ; "EPOCH ORBIT NO. = ", U$: IF U$ <> "" THEN K0 = VAL(U$): PRINT : ELSE PRINT USING "######"; K0
1530 INPUT ; "BEACON FREQUENCY (Mhz) = ", U$: IF U$ <> "" THEN F1 = VAL(U$): PRINT : ELSE PRINT USING "###.###"; F1
1540 PRINT : PRINT "ALL CORRECT ? (Y/N) "
1550 Z$ = "YyNn"
1560 K$ = INKEY$: IF K$ = "" THEN 1560
1570 K = INSTR(Z$, K$)
1580 ON K GOTO 1610, 1610, 1600, 1600
1590 GOSUB 9510: GOTO 1560
1600 CLS : GOTO 1410
1610 LSET I$ = Q$: RSET Y3$ = MKI$(Y3): RSET T0$ = MKD$(T0): RSET I0$ = MKS$(I0)
1620 RSET O0$ = MKS$(O0): RSET E0$ = MKS$(E0): RSET W0$ = MKS$(W0): RSET M0$ = MKS$(M0)
1630 RSET N0$ = MKD$(N0): RSET K0$ = MKS$(K0): RSET F1$ = MKS$(F1)
1640 PUT #1, J%: CLS : RETURN
1650 '
1660 ' ****** ADJUST RECORDS TO FILL DELETED RECORD SPACE ******
1670 FOR K% = J% TO 19
1680 GET #1, K% + 1: PUT #1, K%: NEXT
1690 GOSUB 1360: J% = 20: GOSUB 1610
1700 RETURN
1710 '
1720 ' ****** ADJUST RECORDS TO INSERT NEW RECORD ******
1730 LOCATE 19, 25: PRINT "Do you wish to insert the record";
1740 LOCATE 20, 25: PRINT "in a specific position (Y/N) "; : COLOR 30: PRINT STRING$(2, 176)
1750 Z$ = "YyNn"
1760 K$ = INKEY$: IF K$ = "" THEN 1760
1770 COLOR 14, 1, 0: LOCATE 20, 55: PRINT SPACE$(3)
1780 K = INSTR(Z$, K$)
1790 ON K GOTO 1810, 1810, 1870, 1870
1800 GOSUB 9510: GOTO 1740
1810 LOCATE 21, 25: PRINT "Which position ( 1 TO "; J% - 1; ")";
1820 INPUT R%: IF R% = 0 THEN GOSUB 9510: LOCATE 21, 25: PRINT SPACE$(40): GOTO 1740
1830 IF R% > J% - 1 THEN GOSUB 9510: LOCATE 21, 60: PRINT SPACE$(4): GOTO 1810
1840 J% = R%
1850 FOR K% = 19 TO R% STEP -1
1860 GET #1, K%: PUT #1, K% + 1: NEXT
1870 RETURN
1880 '
1890 ' ****** END OF JOB ROUTINE ******
1900 CLOSE #1: GOTO 70
1910 ' ****** LIST SATELLITE RECORD ******
1920 FOR J% = 1 TO 20: GET #1, J%
1930 IF ASC(I$) < 33 THEN 2040 ELSE IF ASC(I$) > 90 THEN 2040
1940 IF LEFT$(I$, 1) = "" THEN 2040
1950 GOSUB 1190
1960 PRINT : PRINT "ALL CORRECT ? (Y/N) "
1970 Z$ = "YyNn"
1980 K$ = INKEY$: IF K$ = "" THEN 1980
1990 K = INSTR(Z$, K$)
2000 ON K GOTO 2030, 2030, 2020, 2020
2010 GOSUB 9510: GOTO 1980
2020 CLS : GOSUB 1410
2030 NEXT
2040 RETURN
2050 'END PART CHANGE/ADD/DELETE ELEMENTS
2060 ' ****************************************************************
2500 ' *****Bodenstations Daten eingeben/ändern v.1.6- OE1HSI APR. 90*****
2510 SCREEN 0, 1: WIDTH 80: COLOR 14, 1, 0: CLS
2520 GOSUB 6120
2530 COLOR 14, 1, 0
2540 LOCATE 3, 29: PRINT " GROUNDSTATION DATA ": PRINT : GOSUB 2870
2550 LOCATE 12, 30: PRINT " CHANGE ? (Y/N)"
2560 Z$ = "YyNn"
2570 K$ = INKEY$: IF K$ = "" THEN 2570
2580 K = INSTR(Z$, K$)
2590 ON K GOTO 2680, 2680, 2980, 2980
2600 GOSUB 9510: COLOR 28: GOTO 2550
2610 LOCATE 12, 18: PRINT STRING$(255, 32): FOR I = 16 TO 21: LOCATE I, 17: PRINT STRING$(55, 32): NEXT: GOSUB 2870
2620 LOCATE 13, 22: PRINT "Do YOU want to CHANGE AGAIN ? (Y/N) "
2630 Z$ = "YyNn"
2640 K$ = INKEY$: IF K$ = "" THEN 2640
2650 K = INSTR(Z$, K$)
2660 ON K GOTO 2680, 2680, 2970, 2970
2670 GOSUB 9510: COLOR 28: GOTO 2620
2680 COLOR 12: LOCATE 12, 17: PRINT "ENTER NEW DATA or "; CHR$(17) + CHR$(196) + CHR$(217); " for unchanged DATA ": COLOR 14
2690 OPEN "SATBODN.DAT" FOR RANDOM AS #1 LEN = 42
2700 FIELD #1, 10 AS GR$, 20 AS GL$, 4 AS GH$, 4 AS LO$, 4 AS LA$
2710 LOCATE 16, 17: INPUT "CALLSIGN (max. 10 Characters) : ", U$: IF U$ <> "" THEN GS$ = U$ ELSE GS$ = GR1$
2720 LOCATE 17, 17: INPUT "LOCATION (max. 20 Characters) : ", U$: IF U$ <> "" THEN GC$ = U$ ELSE GC$ = GL1$
2730 LOCATE 18, 17: INPUT "HEIGHT above sealevel in mtrs. : ", U$: IF U$ <> "" THEN SH = VAL(U$) ELSE SH = CVS(GH1$)
2740 LOCATE 13, 19: COLOR 10, 4: PRINT "western +360.00 max. east -180.00 max. ": COLOR 14, 1
2750 LOCATE 19, 17: INPUT "LONGITUDE west with decimals : ", U$: IF U$ <> "" THEN LO = VAL(U$) ELSE LO = CVS(LO1$)
2760 IF LO < 0 THEN LO = 360 + LO
2770 LOCATE 13, 19: COLOR 10, 4: PRINT " NORTH of EQUATOR +XX.XX SOUTH -XX.XX ": COLOR 14, 1
2780 LOCATE 20, 17: INPUT "LATITUDE +/- (max.) 90 degrs : ", U$: IF U$ <> "" THEN LA = VAL(U$) ELSE LA = CVS(LA1$)
2790 LSET GR$ = GS$
2800 LSET GL$ = GC$
2810 RSET GH$ = MKS$(SH)
2820 RSET LO$ = MKS$(LO)
2830 RSET LA$ = MKS$(LA)
2840 PUT #1, 1
2850 CLOSE
2860 GOTO 2610
2870 OPEN "SATBODN.DAT" FOR RANDOM AS #1 LEN = 42
2880 FIELD #1, 10 AS GR$, 20 AS GL$, 4 AS GH$, 4 AS LO$, 4 AS LA$
2890 GET #1, 1
2900 LOCATE 5, 22: PRINT "CALLSIGN : "; GR$
2910 LOCATE 6, 22: PRINT "LOCATION : "; GL$
2920 LOCATE 7, 22: PRINT USING "HEIGHT above sealevel : #####"; CVS(GH$)
2930 LOCATE 8, 22: PRINT USING "WESTERN LONGITUDE (dgrs) : ###.##"; CVS(LO$)
2940 LOCATE 9, 22: PRINT USING "LATITUDE (dgrs) : +##.##"; CVS(LA$): PRINT
2950 GR1$ = GR$: GL1$ = GL$: GH1$ = GH$: LO1$ = LO$: LA1$ = LA$
2960 CLOSE : RETURN
2970 COLOR 10, 4: LOCATE 15, 22: PRINT " DATA is saved in file SATBODN.DAT ": SLEEP 2: GOTO 2990
2980 COLOR 10, 4: LOCATE 15, 30: PRINT " DATA UNCHANGED ": SLEEP 2
2990 SLEEP 4: COLOR 14: GOTO 180'MAIN MENU
3000 '**** ENDE PROGRAMM BODENSTATION DATEN ÄNDERN/SPEICHERN OE1HSI APR. 1990 **
3010 '**************************************************************************
3500 ' ****** ORBITS2 - *************
3510 CLS : KEY OFF: SCREEN 2, 0: WIDTH 80: NDUR = 25: TTT$ = " ON": NOTON = 1
3520 OUT 985, 10 ' Set foreground color for high resolution screen
3530 LOCATE 2
3540 LOCATE 2, 21: PRINT "This program was originally written by"
3550 LOCATE 4, 27: PRINT "R. D. Welch, W0SL"
3560 LOCATE 7, 12: PRINT "The present version 7.4E was written by OE1HSI - April 90"
3570 LOCATE 9, 27: PRINT "Ing. Herbert F. Strasser "
3580 LOCATE 10, 27: PRINT "SLATINGASSE 6/B/5"
3590 LOCATE 11, 27: PRINT "A 1130 VIENNA/AUSTRIA"
3600 GOSUB 6130
3610 '
3620 ' ****** HOUSE KEEPING ITEMS ******
3630 DEF FNMTH = VAL(LEFT$(D$, 2)): DEF FNDAY = VAL(MID$(D$, 4, 2))
3640 DEF FNYR = VAL(RIGHT$(D$, 2)): DEF FNHR = VAL(LEFT$(T$, 2))
3650 DEF FNMIN = VAL(MID$(T$, 4, 2)): DEF FNSEC = VAL(RIGHT$(T$, 2))
3660 ' ****** SETUP UTC DATE AND TIME ******
3670 GOSUB 3750
3680 LOCATE 15, 30, 0: PRINT "UTC DATE = "; EDAT$
3690 LOCATE 16, 30: PRINT "UTC TIME = "; TIME$
3700 LOCATE 20, 3: PRINT "ENTER NEW UTC-DATE (DD-MM-YY)?.. or "; CHR$(17) + CHR$(196) + CHR$(217)
3710 LOCATE 20, 54: INPUT " ", ED$
3720 IF ED$ = "" THEN D$ = DATE$: GOTO 3740
3730 D$ = MID$(ED$, 4, 3) + LEFT$(ED$, 3) + RIGHT$(ED$, 2)
3740 DATE$ = D$: D$ = DATE$: GOSUB 3750: GOTO 3760'Quick format check
3750 MM$ = LEFT$(DATE$, 2): DD$ = MID$(DATE$, 4, 2): JJ$ = RIGHT$(DATE$, 4): EDAT$ = DD$ + "." + MM$ + "." + JJ$: RETURN
3760 LOCATE 20, 50: PRINT SPACE$(13)
3770 LOCATE 20, 3: PRINT "ENTER NEW UTC-TIME (HH:MM:SS)?.. or "; CHR$(17) + CHR$(196) + CHR$(217)
3780 LOCATE 20, 54: INPUT " ", T$
3790 IF T$ = "" THEN T$ = TIME$
3800 TIME$ = T$: T$ = TIME$ ' Quick format check
3810 CLS
3820 '
3830 ' ****** DRAW AND STORE SATELLITE INDICATOR ******
3840 CLS
3850 LINE (4, 0)-(4, 4): LINE (0, 2)-(8, 2)
3860 GET (0, 0)-(8, 4), SAT: PUT (0, 0), SAT
3870 CLS
3880 LINE (4, 1)-(4, 3): LINE (3, 2)-(5, 2)
3890 GET (0, 0)-(8, 4), PKT: PUT (0, 0), PKT
3900 '
3910 ' ****** NUMERIC CONSTANTS ******
3920 GOSUB 6270
3930 '
3940 ' ****** GROUND STATION CONSTANTS ******
3950 GOSUB 6340
3960 '
3970 ' ****** DERIVED CONSTANTS ******
3980 GOSUB 6480
3990 '
4000 ' ****** ESTABLISH SIDEREAL TIME TABLE MATRIX ******
4010 RESTORE 7100: FLG1 = 0: FLG2 = 0: D$ = DATE$: CLS
4020 FOR I1 = 1 TO 14
4030 READ Y1(I1), G3(I1) ' Read sidereal time table
4040 IF Y1(I1) = FNYR THEN FLG1 = 1
4050 IF Y1(I1) = FNYR - 1 THEN FLG2 = 1
4060 IF Y1(I1) = 0 THEN 4080
4070 NEXT
4080 IF FLG1 = 1 AND FLG2 = 1 THEN 4110
4090 PRINT "Requested and/or preceeding YEAR NOT in the SIDERAL TIMETABLES. ": SLEEP 3: GOTO 180
4100 ' ****** ESTABLISH SATELLITE ELEMENT MATRIX ******
4110 Y = FNYR: GOSUB 7250: IF RSFLAG = 1 THEN GOTO 180 ELSE GOTO 4140
4120 '
4130 ' ****** SET UP KEY TRAPPING ******
4140 ON KEY(9) GOSUB 5810: KEY(9) STOP
4150 ON KEY(8) GOSUB 5600: KEY(8) STOP
4160 ON KEY(7) GOSUB 5580: KEY(7) STOP
4170 ON KEY(10) GOSUB 5840: KEY(10) OFF
4180 FLG9 = 0: FLG10 = 0: GOSUB 5310
4190 '
4200 ' ****** ORBIT DETERMINATION LOOP STARTS HERE ******
4210 FOR J = 1 TO I - 1
4220 Q$ = INKEY$: IF Q$ = CHR$(27) THEN CLOSE : GOTO 180
4230 IF FLG10 <> 2 THEN 4250
4240 IF I$(J) <> I1$ THEN 4310
4250 GOSUB 4360
4260 IF FLG9 = 0 THEN 4310
4270 DISPFL = 0
4280 GOSUB 5130:
4290 GOSUB 4810: GOSUB 4870' satdis
4300 DISPFL = 1
4310 GOSUB 5050
4320 NEXT
4330 GOTO 4210
4340 '
4350 ' ****** ORBIT CALCULATION SUBROUTINE ******
4360 A0(J) = ((G0 / (N0(J) * N0(J))) ^ (1 / 3))
4370 E2 = 1 - E0(J) * E0(J): E1 = SQR(E2): Q0 = M0(J) / 360 + K0(J)
4380 K2 = 9.95 * ((R0 / A0(J)) ^ 3.5) / (E2 * E2)
4390 S1 = SIN(I0(J) * P0): C1 = COS(I0(J) * P0): D$ = DATE$
4400 T = INT(30.55 * (FNMTH + 2)) - 2 * ((FNMTH + 7) \ 10) - 91
4410 IF FNMTH > 2 THEN IF FNYR / 4 = INT(FNYR / 4) THEN T = T + 1
4420 IF Y3(J) = FNYR - 1 THEN T = T + 365 ELSE 4440
4430 IF Y3(J) / 4 = INT(Y3(J) / 4) THEN T = T + 1
4440 T$ = TIME$: T = T + FNDAY + FNHR / 24 + FNMIN / 1440 + FNSEC / 86400!
4450 O = O0(J) - (T - T0(J)) * K2 * C1: S0 = SIN(O * P0): C0 = COS(O * P0)
4460 W = W0(J) + (T - T0(J)) * K2 * (2.5 * (C1 * C1) - .5)
4470 S2 = SIN(W * P0): C2 = COS(W * P0)
4480 C(1, 1) = (C2 * C0) - (S2 * S0 * C1): C(1, 2) = -(S2 * C0) - (C2 * S0 * C1)
4490 C(2, 1) = (C2 * S0) + (S2 * C0 * C1): C(2, 2) = -(S2 * S0) + (C2 * C0 * C1)
4500 C(3, 1) = (S2 * S1): C(3, 2) = (C2 * S1)
4510 Q = N0(J) * (T - T0(J)) + Q0: K = INT(Q): M9 = INT((Q - K) * 256): M = (Q - K) * P2
4520 E = M + E0(J) * SIN(M) + .5 * (E0(J) * E0(J)) * SIN(2 * M)
4530 S3 = SIN(E): C3 = COS(E): R3 = 1 - E0(J) * C3: M1 = E - E0(J) * S3
4540 M5 = M1 - M: IF ABS(M5) < .000001 THEN 4560 ELSE E = E - M5 / R3
4550 GOTO 4530
4560 X0 = A0(J) * (C3 - E0(J)): Y0 = A0(J) * E1 * S3: R = A0(J) * R3
4570 X1 = X0 * C(1, 1) + Y0 * C(1, 2): Y1 = X0 * C(2, 1) + Y0 * C(2, 2): Z1 = X0 * C(3, 1) + Y0 * C(3, 2)
4580 FOR I2 = 1 TO I1: IF Y3(J) = Y1(I2) THEN G2 = G3(I2)
4590 NEXT
4600 G7 = T * G1 + G2: G7 = (G7 - INT(G7)) * P2: S7 = -SIN(G7): C7 = COS(G7)
4610 X = (X1 * C7) - (Y1 * S7): Y = (X1 * S7) + (Y1 * C7): Z = Z1
4620 X5 = (X - X9): Y5 = (Y - Y9): Z5 = (Z - Z9): R5 = SQR(X5 * X5 + Y5 * Y5 + Z5 * Z5)
4630 Z8 = (X5 * C8 * C9) + (Y5 * S8 * C9) + (Z5 * S9)
4640 X8 = -(X5 * C8 * S9) - (Y5 * S8 * S9) + (Z5 * C9): Y8 = (Y5 * C8) - (X5 * S8)
4650 S5 = Z8 / R5: C5 = SQR(1 - S5 * S5): E9 = ATN(S5 / C5) / P0
4660 IF X8 < 0 THEN A9 = P1 + ATN(Y8 / X8) ELSE 4680
4670 GOTO 4710
4680 IF X8 > 0 AND Y8 >= 0 THEN A9 = ATN(Y8 / X8) ELSE IF X8 > 0 THEN A9 = P2 + ATN(Y8 / X8) ELSE 4700
4690 GOTO 4710
4700 IF Y8 < 0 THEN A9 = 3 * P1 / 2 ELSE A9 = P1 / 2
4710 A9 = A9 / P0
4720 IF X < 0 THEN W5 = P1 + ATN(Y / X) ELSE 4740
4730 GOTO 4770
4740 IF X > 0 AND Y >= 0 THEN W5 = ATN(Y / X) ELSE IF X > 0 THEN W5 = P2 + ATN(Y / X) ELSE 4760
4750 GOTO 4770
4760 IF Y < 0 THEN W5 = 3 * P1 / 2 ELSE W5 = P1 / 2
4770 W5 = 360 - W5 / P0: B5 = Z / R: L5 = ATN(B5 / (SQR(1 - B5 ^ 2))) / P0
4780 RETURN
4790 '
4800 ' ****** LAT./LONG. PLOT ROUTINE ******
4810 Y6 = CINT(.7111 * (90 - L5) + 3)
4820 IF W5 <= 270 AND W5 >= 0 THEN X6 = CINT(477 - W5 * 1.7444)
4830 IF W5 > 270 AND W5 <= 360 THEN X6 = CINT(1105 - W5 * 1.7444)
4840 RETURN
4850 '
4860 ' ****** PUT SATELLITE ON SCREEN ROUTINE ******
4870 GET (X6 - 4, Y6 - 2)-(X6 + 4, Y6 + 2), KEP
4880 FOR ID = 1 TO (NDUR * 10): NEXT ID 'ZEILENDELAY
4890 PUT (X6 - 4, Y6 - 2), SAT, PRESET
4900 FOR ID = 1 TO (NDUR * 12): NEXT ID 'AUFBLINKDELAY
4910 PUT (X6 - 4, Y6 - 2), SAT
4920 PUT (X6 - 4, Y6 - 2), KEP, PSET
4930 PUT (X6 - 4, Y6 - 2), SAT
4940 IF FLG0 = 0 THEN 4970
4950 PUT (SATL(J, 1), SATL(J, 2)), SAT
4960 PUT (SATL(J, 1), SATL(J, 2)), PKT, OR
4970 SATL(J, 1) = X6 - 4: SATL(J, 2) = Y6 - 2
4980 IF J = I - 1 THEN FLG0 = 1
4990 LOCATE 1, 1: PRINT "[E"; : FOR ID = 1 TO (NDUR * 10): NEXT ID 'NACHBLINKDELAY
5000 IF NOTON = 1 THEN GOTO 5020
5010 PLAY "MB N38 L42"
5020 RETURN
5030 '
5040 ' ****** PRINT SATELLITE DETAILS SUBROUTINE ******
5050 KEY(9) ON: KEY(10) ON: KEY(8) ON: KEY(7) ON
5060 KEY(10) STOP: KEY(9) STOP: KEY(8) STOP: KEY(7) STOP
5070 IF FLGK = 1 THEN GOSUB 5290
5080 IF FLG9 = 0 GOTO 5180
5090 IF FLG10 = 1 THEN GOSUB 5650
5100 IF FLG10 = 0 THEN 5130 ELSE V$ = SPACE$(10): LSET V$ = I$(J)
5110 IF V$ <> U$ THEN 5260
5120 LOCATE 25, 73: PRINT "SELECTED";
5130 IF DISPFL = 1 THEN GOTO 5260
5140 LOCATE 25, 1: PRINT SPACE$(68);
5150 LOCATE 25, (12 - LEN(I$(J))) / 2 + 1: PRINT I$(J);
5160 LOCATE 25, 15
5170 GOTO 5240
5180 COLOR 3: LOCATE 3, 44: PRINT EDAT$: LOCATE 4, 37: PRINT T$
5190 IF E9 >= 0 THEN COLOR 12 ELSE 5210
5200 IF E9 > 0 AND E9 < 1 THEN COLOR 28: BEEP
5210 LOCATE 1 * J + 8, 15: PRINT SPACE$(50)
5220 LOCATE 1 * J + 8, (12 - LEN(I$(J))) / 2 + 1: PRINT I$(J)
5230 LOCATE 1 * J + 8, 15
5240 PRINT USING "### ### ##### ##### ###.# ###.# ###### ###"; A9; E9; R5; (R - R0); L5; W5; K; M9;
5250 IF FLG9 = 0 GOTO 5260 ELSE LOCATE 20, 65: PRINT TIME$;
5260 RETURN
5270 '
5280 ' ****** SET UP SCREEN DISPLAY ROUTINE ******
5290 CLS : FLG0 = 0: FLGK = 0: FLG10 = 0
5300 IF FLG9 = 1 THEN 5390
5310 SCREEN 0, 1: COLOR 2, 0, 0
5320 LOCATE 1, 40 - LEN(C$) / 2, 0: PRINT C$
5330 LOCATE 2, 24: PRINT " REALTIME SATELLITE TRACKING "
5340 LOCATE 3, 29: PRINT "COORDINATES ON"
5350 LOCATE 4, 34: PRINT "AT": LOCATE 4, 46: PRINT "UTC"
5360 LOCATE 25, 4: PRINT "ESC = END F9 = GRAPH <-> TABLE ";
5370 L1 = 6: L2 = 7: L3 = 8
5380 GOTO 5510
5390 GOSUB 5780: SCREEN 2, 0: OUT 985, 10: IF FLAGM <> 0 THEN GOTO 5430
5400 DEF SEG = &HB800: BLOAD "SATMAP.DAT", 0: DEF SEG = 0
5410 W5 = W9: L5 = L9: GOSUB 4810
5420 CIRCLE (X6, Y6), 2: FLAGM = 1: GOTO 5440
5430 PUT (0, 0), WLT, PSET: FLG0 = 1
5440 GOSUB 5750: L1 = 22: L2 = 23: L3 = 24
5450 LOCATE 20, 2: PRINT "Calculated for on "; EDAT$; " at h-UTC";
5460 LOCATE 20, 16 + (30 - LEN(C$)) / 2: PRINT C$
5470 LOCATE 1, 1: PRINT "[ESC]=END"
5480 LOCATE 1, 15: PRINT "[F7]=SPEED ": LOCATE 1, 32: PRINT "[F8]=BEEP"
5490 LOCATE 1, 50: PRINT "[F9]=LISTING": LOCATE 1, 66: PRINT "[F10]=SINGLESAT";
5500 GOSUB 5610: GOSUB 5590
5510 LOCATE L1, 3
5520 PRINT "NAME or AZ EL range height latid. longit. orbit PHASE"
5530 LOCATE L2, 3
5540 PRINT "DESIGNATOR deg deg km km deg deg No. <256>"
5550 LOCATE L3, 3
5560 PRINT "---------- --- --- ----- ------ ----- ----- ------ ---";
5570 RETURN
5580 NDUR = NDUR - 8: IF NDUR < 1 THEN NDUR = 73
5590 LOCATE 1, 26: PRINT USING "#"; (NDUR \ 8); : RETURN
5600 IF NOTON = 0 THEN NOTON = 1: TTT$ = " ON": ELSE NOTON = 0: TTT$ = "OFF"
5610 LOCATE 1, 41: PRINT TTT$: RETURN 'NOTON TOGGELN
5620 ' ****** SELECT SINGLE SATELLITE ROUTINE ******
5630 LOCATE 25, 1: PRINT SPACE$(79); : FSOK = 0
5640 LOCATE 25, 1: INPUT ; "Not found, try again or <CR> for ALL "; I1$: GOTO 5670
5650 LOCATE 25, 1: PRINT SPACE$(79); : FSOK = 0
5660 LOCATE 25, 1: INPUT ; "SELECT stellite or hit <CR> for ALL "; I1$
5670 IF I1$ = "" THEN FLG10 = 0: GOTO 5730
5680 FOR JA = 1 TO ITOT
5690 IF I1$ = I$(JA) THEN FSOK = 1:
5700 NEXT JA
5710 IF FSOK = 1 THEN GOTO 5720: ELSE GOSUB 9510: GOTO 5630
5720 U$ = SPACE$(10): LSET U$ = I1$: FLG10 = 2
5730 LOCATE 25, 1: PRINT SPACE$(78);
5740 RETURN
5750 WIDTH 80
5760 LOCATE , , 1, 12, 13
5770 RETURN
5780 ' SWITCH TO COLOR
5790 OUT 980, 2: OUT 981, 85
5800 RETURN
5810 IF FLG9 = 0 THEN FLG9 = 1: SOUND 1800, 1: GOTO 5830'FLAG9 TOGGELN
5820 FLG9 = 0: GET (0, 0)-(639, 144), WLT
5830 FLGK = 1: RETURN
5840 IF FLG9 = 1 THEN FLG10 = 1 ELSE FLG10 = 0: GOTO 5060
5850 SOUND 1800, 1: RETURN
5860 GOTO 180 'ENDE PROGRAMMTEIL ECHTZEITDISPLAY
6000 '****** ORBIT2 *************
6010 KEY OFF: SCREEN 0, 1: WIDTH 80: COLOR 14, 1, 0: CLS
6020 PRINT " This program originates from publications of the AMSAT JOURNAL"
6030 PRINT " AMSAT ORBITAL PREDICTION PROGRAM de W3IWI - May,1980"
6040 PRINT " by Dr. Thomas A. Clark, W3IWI"
6050 PRINT
6060 PRINT " it was first adopted to the IBM-PC by Mr. R. D. Welch, W0SL - Mai, 1983"
6070 PRINT
6080 PRINT " The present version 7.4E was written and compiled with QUICKBASIC 4.5"
6090 PRINT " by Ing. H.F.STRASSER OE1HSI in April 1990"
6100 PRINT " A 1130 VIENNA/AUSTRIA": PRINT :
6110 GOSUB 6120: GOTO 6190
6120 COLOR 1, 2
6130 LOCATE 23, 5: PRINT " NON COMMERCIAL USE GRANTED, PROVIDED THAT CREDIT IS GIVEN ";
6140 LOCATE 24, 5: PRINT " TO THE AUTHORS, AMSAT AND THE ORBIT MAGAZINE ";
6150 LOCATE 25, 5: PRINT " PROGRAM by OE1HSI, CALCULATION W3IWI, GRAPHS W0SL COPYRIGHT 1980-1990 ";
6160 RETURN
6170 '
6180 ' ****** HOUSEKEEPING ITEMS ******
6190 COLOR 14, 1, 0: LOCATE 13, 1'CLEAR
6200 OPEN "SCRN:" FOR OUTPUT AS #3
6210 C8$ = CHR$(10) + CHR$(10) + CHR$(10) + CHR$(10)
6220 C9$ = CHR$(12) + CHR$(7)
6230 DEF FNT$ (D) = CHR$(48 + INT(D / 10)) + CHR$(48 + D - 10 * INT(D / 10))
6240 YY = 0
6250 '****** NUMERIC CONSTANTS ******
6260 GOSUB 6270: GOSUB 6340: GOTO 6470
6270 P1 = 3.1415926535# ' Value of PI
6280 R0 = 6378.16: F = 298.16 ' Earth's radius, 1/Earth flattening coef.
6290 G0 = 75369793000000# ' GM of Earth in (orbits/day)^2/km^3
6300 G1 = 1.0027379093#: C = 299792.5' Sidereal/Solar time rate ratio
6310 RETURN
6320 '
6330 ' ****** GROUND STATION CONSTANTS ******
6340 OPEN "SATBODN.DAT" FOR RANDOM AS #1 LEN = 42
6350 FIELD #1, 10 AS TR$, 20 AS TL$, 4 AS GH$, 4 AS LO$, 4 AS LA$
6360 GET #1, 1
6370 L9 = CVS(LA$): W9 = CVS(LO$): H9 = CVS(GH$): GL$ = TL$: GR$ = TR$
6380 CLOSE #1
6390 'L9=BREITE IN GRD.
6400 'W9=LÄNGE westl. in Grd.
6410 'H9=SEEHÖHE IN Mtr.
6420 'C$=BODENSTAT. RUFZ. & ORT
6430 C$ = RTRIM$(GR$) + " " + RTRIM$(GL$)
6440 RETURN '***
6450 '
6460 ' ****** DERIVED CONSTANTS ******
6470 GOSUB 6480: GOTO 6570
6480 P2 = 2 * P1: P0 = P1 / 180: F = 1 / F: L8 = L9 * P0: S9 = SIN(L8): C9 = COS(L8)
6490 S8 = SIN(-W9 * P0): C8 = COS(W9 * P0)
6500 R9 = R0 * (1 - (F / 2) + (F / 2) * COS(2 * L8)) + H9 / 1000
6510 L8 = ATN((1 - F) ^ 2 * S9 / C9): Z9 = R9 * SIN(L8)
6520 X9 = R9 * COS(L8) * C8: Y9 = R9 * COS(L8) * S8
6530 RETURN
6540 CSRHLT = CSRLIN: LOCATE (CSRHLT - 1), 1
6550 GOSUB 9510: COLOR 12: PRINT " enter YEAR 1990 or later !": COLOR 14, 1, 0
6560 ' ****** INPUT DATA ******
6570 INPUT ; "Start Year (19YY) = ", Y: IF Y < 1990 GOTO 6540 ELSE YY = Y: Y = Y / 100: Y = INT(100 * (Y - INT(Y)) + .1)
6580 INPUT ; " Month (1-12) = ", M
6590 IF M > 12 THEN
6600 CSRHLT = CSRLIN: POSHLT = POS(0): LOCATE (CSRHLT - 1), 1
6610 COLOR 12: PRINT " MONTHS INVALID, ENTER 1-12 !": COLOR 14, 1, 0: GOSUB 9510
6620 LOCATE CSRHLT, (POSHLT - 20)
6630 GOTO 6580
6640 END IF
6650 INPUT ; " Day = ", D
6660 IF D > 31 THEN
6670 POSHLT = POS(0): CSRHLT = CSRLIN: LOCATE (CSRHLT - 1), 1
6680 COLOR 12: PRINT " DAY INVALID, ENTER 1-31 ! ": COLOR 14, 1, 0: GOSUB 9510
6690 LOCATE CSRHLT, (POSHLT - 11): GOTO 6630
6700 END IF
6710 CSRHLT = CSRLIN: POSHLT = POS(0)
6720 LOCATE (CSRHLT - 1), 1: PRINT STRING$(45, 32); : LOCATE CSRHLT, POSHLT
6730 T$ = FNT$(Y) + "/" + FNT$(M) + "/" + FNT$(D) + " at "
6740 TE$ = FNT$(D) + "." + FNT$(M) + "." + FNT$(Y) + " um "
6750 D8 = D + INT(30.55 * (M + 2)) - 2 * ((M + 7) \ 10) - 91
6760 IF M > 2 THEN IF Y / 4 = INT(Y / 4) THEN D8 = D8 + 1
6770 PRINT " Day No.= "; D8: PRINT
6780 INPUT ; "Start UTC Time (HH) = ", H
6790 INPUT " Min. = ", M: T7 = D8 + H / 24 + M / 1440
6800 T$ = T$ + FNT$(H) + FNT$(M) + ":00 H"
6810 INPUT ; "Timespan in Hours = ", H1
6820 INPUT " + Min. = ", M1: T8 = T7 + H1 / 24 + M1 / 1440
6830 INPUT ; "Timestep in Min. = ", M2: T9 = M2 / 1440
6840 PRINT USING " from ###.####### to ###.#######"; T7; T8
6850 PRINT : INPUT "MINIMUM ELEVATION ? (Default 0) dgr. = ", E8
6860 GOTO 6880
6870 COLOR 28, 1, 0: GOSUB 9510: CSRHLT = CSRLIN: LOCATE (CSRHLT - 2), 1
6880 PRINT "OUTPUT to Printer (P), to the SCREEN (S) or to FILE (F) ?-->";
6890 P$ = INKEY$: IF P$ = "" THEN 6890
6900 IF (P$ = "p" OR P$ = "P" OR P$ = "S" OR P$ = "s" OR P$ = "F" OR P$ = "f") THEN 6910 ELSE 6870
6910 COLOR 14, 1, 0: IF P$ = "P" OR P$ = "p" THEN P% = 2: GOTO 6930
6920 IF P$ = "S" OR P$ = "s" THEN P% = 3 ELSE P% = 1
6930 IF P% = 3 OR P% = 1 THEN C9$ = C8$: GOTO 6990
6940 GOSUB 9200: IF DRKFLG = 0 GOTO 6980
6950 CLS : COLOR 12: LOCATE 12, 20: PRINT DRK$: LOCATE 14, 20: PRINT NEUEIN$;
6960 PRINT : GOTO 6880
6970 '**** ESTABLISH SIDERAL TIME TABLE MATRIX *******
6980 OPEN "LPT1:" FOR OUTPUT AS #2
6990 RESTORE 7100: FLG1 = 0: FLG2 = 0: CLS
7000 FOR I1 = 1 TO 13
7010 READ Y1(I1), GG3(I1)
7020 IF Y1(I1) = Y THEN FLG1 = 1
7030 IF Y1(I1) = Y - 1 THEN FLG2 = 1
7040 IF Y1(I1) = 0 THEN 7060
7050 NEXT
7060 IF FLG1 = 1 AND FLG2 = 1 THEN 7240
7070 PRINT "CURRENT AND/OR PRECEEDING YEAR NOT IN SIEDERAL TIMETABLES ": SLEEP 3: GOTO 180
7080 '
7090 ' ****** SIDEREAL TIME TABLE ******
7100 DATA 89, 0.2767676850
7110 DATA 90, 0.2761045795
7120 DATA 91, 0.2754414740
7130 DATA 92, 0.2747783685
7140 DATA 93, 0.2768531723
7150 DATA 94, 0.2761900668
7160 DATA 95, 0.2755269613
7170 DATA 96, 0.2748638558
7180 DATA 97, 0.2769386596
7190 DATA 98, 0.2762755541
7200 DATA 99, 0.2756124486
7210 DATA 0,0
7220 '
7230 ' ****** ESTABLISH SATELLITE ELEMENT MATRIX ******
7240 GOSUB 7250: IF RSFLAG = 1 THEN GOTO 180 ELSE GOTO 7430
7250 OPEN "SATKEPN.DAT" FOR RANDOM AS #1 LEN = 56
7260 FIELD #1, 10 AS I$, 2 AS Y3$, 8 AS T0$, 4 AS I0$, 4 AS O0$, 4 AS E0$, 4 AS W0$, 4 AS M0$, 8 AS N0$, 4 AS K0$, 4 AS F1$
7270 I = 0: RSFLAG = 0
7280 I = I + 1: ITOT = I: IF I > 20 THEN RETURN
7290 GET #1, I
7300 FOR J = 1 TO 10
7310 IF MID$(I$, J, 1) = SPACE$(1) THEN 7340 ELSE IF J = 10 THEN J = 11
7320 NEXT
7330 CLOSE #1
7340 I$(I) = LEFT$(I$, J - 1): IF I$(I) = "END" THEN RETURN
7350 IF LEFT$(I$, 1) = SPACE$(1) THEN RETURN
7360 Y3(I) = CVI(Y3$): T0(I) = CVD(T0$): I0(I) = CVS(I0$): O0(I) = CVS(O0$)
7370 E0(I) = CVS(E0$): W0(I) = CVS(W0$): M0(I) = CVS(M0$): N0(I) = CVD(N0$)
7380 K0(I) = CVS(K0$): F1(I) = CVS(F1$)
7390 IF Y3(I) = Y THEN 7280 ELSE IF Y3(I) = Y - 1 THEN 7280 ELSE PRINT "ELEMENTS of SATELLITE "; I$(I);
7400 PRINT " NOT FROM CURRENT or PRECEEDING YEAR": SLEEP 3: RSFLAG = 1: RETURN
7410 '
7420 ' ****** SELECT SATELLITE FROM MENU ******
7430 CLS : PRINT " SELECT ONE OF THE FOLLOWING: ": PRINT
7440 FOR J = 1 TO I - 1
7450 PRINT "ENTER No.:"; J; " for "; I$(J)
7460 NEXT
7470 PRINT : INPUT "SATELLITE No.", J
7480 IF J < 1 OR J > I - 1 THEN 7430
7490 LOCATE 12, 33: PRINT "Doppler Frequency calculated for"; F1(J); "MHz";
7500 LOCATE 14, 33: INPUT "Enter changed Frequ. or <CR> for Default ", D
7510 IF D <> 0 THEN F1(J) = D
7520 IF P% <> 1 THEN 7660 ELSE CLOSE #1
7530 LOCATE 16, 33: PRINT "WHICH DRIVE SHOULD BE USED FOR DATA-OUTPUT ?";
7540 LOCATE 18, 36: INPUT "==> enter drive identifier (A.....J): "; DR$: LOCATE 16, 33: PRINT SPC(45);
7550 DRM$ = "ABCDEFGHIJabcdefghij"
7560 FOR I = 1 TO 20
7570 IF DR$ = MID$(DRM$, I, 1) THEN 7610 'drive ok?
7580 NEXT
7590 LOCATE 17, 36: COLOR 10, 4: PRINT "*** INVALID DRIVE identifier *** "; : PLAY "AFCEG": SLEEP 1
7600 COLOR 14, 1: LOCATE 18, 74: PRINT SPACE$(5); : LOCATE 17, 36: PRINT SPACE$(35): : GOTO 7530
7610 LOCATE 19, 33: PRINT SPACE$(46): LOCATE 20, 33: PRINT SPACE$(46);
7620 ON ERROR GOTO 7640: OUTP$ = DR$ + ":SATDATA.TXT": OPEN OUTP$ FOR OUTPUT AS #1: LOCATE 20, 12: ON ERROR GOTO 10000
7630 LOCATE 20, 33: COLOR 10, 4: PRINT "SAVING DATA ON DRIVE "; DR$; ": AS FILE: SATDATA.TXT": COLOR 14, 1: ON ERROR GOTO 10000: GOTO 7660
7640 LOCATE 18, 33: COLOR 10, 4: PRINT " *** CAN'T OPEN FILE - CHECK DRIVE "; DR$; ": *** ": PLAY "CGCGCG"
7650 LOCATE 18, 33: COLOR 14, 1: PRINT SPACE$(46): RESUME 7530
7660 IF P% = 3 THEN CLS
7670 PRINT #P%, : PRINT #P%, "ORBIT DATA for "; I$(J)
7680 PRINT #P%,
7690 PRINT #P%, "Referenz Epoche = "; Y3(J); " +"; T0(J)
7700 PRINT #P%, "START PERIOD"; Y; " +"; T7; " = "; T$
7710 PRINT #P%,
7720 PRINT #P%, "Parameter"; TAB(20); "Reference"; TAB(40); "Start"
7730 T = T7
7740 IF Y3(J) = Y - 1 THEN T = T + 365: T8 = T8 + 365 ELSE 7760
7750 IF Y3(J) / 4 = INT(Y3(J) / 4) THEN T = T + 1: T8 = T8 + 1
7760 FOR I2 = 1 TO I1: IF Y3(J) = Y1(I2) THEN G2 = GG3(I2)
7770 NEXT
7780 GOSUB 8350
7790 PRINT #P%, "Orbit Number "; TAB(20); K0(J); TAB(40); K
7800 PRINT #P%, "Mean Anomaly "; TAB(20); M0(J); TAB(40); M / P0
7810 PRINT #P%, "Inclination "; TAB(20); I0(J)
7820 PRINT #P%, "Eccentricity "; TAB(20); E0(J)
7830 PRINT #P%, "Mean Motion "; TAB(20); N0(J)
7840 PRINT #P%, "S.M.A.,km "; TAB(20); A0(J)
7850 PRINT #P%, "Arg. Perigee "; TAB(20); W0(J); TAB(40); W
7860 PRINT #P%, "R. A. A. N. "; TAB(20); O0(J); TAB(40); O
7870 PRINT #P%, "Freq.,MHz "; TAB(20); F1(J): K9 = 9E+07: K8 = 9E+07
7880 '
7890 '****** COMPUTATION LOOP ******
7900 T = T + T9: K7 = INT(T): GOSUB 8350
7910 IF K7 = K8 THEN 7930
7920 K8 = 9E+07: K9 = 9E+07
7930 GOSUB 8520: IF E9 < E8 THEN 8080
7940 IF K7 = K8 AND K = K9 THEN 8000
7950 IF K7 = K8 THEN 7990 ELSE GOSUB 8260
7960 K8 = K7
7970 PRINT #P%, " U.T.C. AZ EL DOPPLER RANGE HEIGHT LAT. LONG. PHASE"
7980 PRINT #P%, "HHMM:SS dgr: dgr: Hz km km dgr. dgr. <256>"
7990 PRINT #P%, TAB(20); "- - - ORBIT No."; K; "- - -"
8000 K9 = K: T4 = T - K7: S4 = INT(T4 * 86400!): H4 = INT(S4 / 3600 + .000001)
8010 M4 = INT((S4 - H4 * 3600) / 60 + .000001)
8020 S4 = S4 - 3600 * H4 - 60 * M4
8030 T$ = FNT$(H4) + FNT$(M4) + ":" + FNT$(S4)
8040 F9 = -F1(J) * 1000000! * R8 / C
8050 PRINT #P%, T$;
8060 PRINT #P%, USING " ### ### #####"; A9; E9; F9;
8070 PRINT #P%, USING " ##### ##### ###.# ###.# ###"; R5; (R - R0); L5; W5; M9
8080 IF T < T8 THEN GOTO 7900
8090 PRINT #P%, C9$
8100 IF P% = 1 OR P% = 2 THEN LOCATE 19, 60: PLAY "CEGC": COLOR 10: PRINT "END OF CALCULATION!"
8110 LOCATE 20, 33: IF P% = 1 THEN PRINT "*** DATA SAVED in SATDATA.TXT ON DRIVE "; DR$; ": ***"
8120 CLOSE : ON ERROR GOTO 10000
8130 LOCATE 21, 33: PRINT SPACE$(46);
8140 LOCATE 22, 33: PRINT SPACE$(46);
8150 LOCATE 23, 33: PRINT SPACE$(46);
8160 LOCATE 23, 33: PRINT SPACE$(46);
8170 LOCATE 22, 33: COLOR 14: PRINT "Another REQUEST ? (Y/N) ";
8180 LOCATE 23, 33: PRINT "enter <N> to return to the MAIN MENU !";
8190 Z$ = "YyNn"
8200 K$ = INKEY$: IF K$ = "" THEN 8200
8210 K = INSTR(Z$, K$)
8220 ON K GOTO 6010, 6010, 8240, 8240
8230 GOSUB 9510: GOTO 8200
8240 CLOSE : GOTO 180
8250 '****** PAGE HEADER SUBROUTINE ******
8260 PRINT #P%, C9$; C$; " W.LONG.="; W9; " LATITUDE="; L9; "Height="; H9;
8270 P = P + 1: PRINT #P%, TAB(71); "Page "; P
8280 PRINT #P%, TAB(14); " - - Minnimal Ant.Elevation = "; E8; "Degrees-"
8290 PRINT #P%,
8300 DN = K7: GOSUB 8800
8310 PRINT #P%, TAB(14); "- - DAY No."; K7; "- - - "; DD; ". "; M$; YY; "- - -"
8320 PRINT #P%, : RETURN
8330 '
8340 '****** ORBIT DETERMINATION AND UTILITY ROUTINES ******
8350 A0(J) = ((G0 / (N0(J) * N0(J))) ^ (1 / 3))
8360 E2 = 1 - E0(J) * E0(J): E1 = SQR(E2): Q0 = M0(J) / 360 + K0(J)
8370 K2 = 9.95 * ((R0 / A0(J)) ^ 3.5) / (E2 * E2)
8380 S1 = SIN(I0(J) * P0): C1 = COS(I0(J) * P0)
8390 O = O0(J) - (T - T0(J)) * K2 * C1
8400 S0 = SIN(O * P0): C0 = COS(O * P0)
8410 W = W0(J) + (T - T0(J)) * K2 * (2.5 * (C1 * C1) - .5)
8420 S2 = SIN(W * P0): C2 = COS(W * P0)
8430 CC(1, 1) = (C2 * C0) - (S2 * S0 * C1): CC(1, 2) = -(S2 * C0) - (C2 * S0 * C1)
8440 CC(2, 1) = (C2 * S0) + (S2 * C0 * C1): CC(2, 2) = -(S2 * S0) + (C2 * C0 * C1)
8450 CC(3, 1) = (S2 * S1): CC(3, 2) = (C2 * S1)
8460 Q = N0(J) * (T - T0(J)) + Q0: K = INT(Q): M9 = INT((Q - K) * 256): M = (Q - K) * P2
8470 IF P% = 3 THEN 8510
8480 LOCATE 21, 33: PRINT USING "START CALCULATION AT DAY ###.#######"; T7
8490 LOCATE 22, 33: PRINT USING " END CALCULATION AT DAY ###.#######"; T8
8500 LOCATE 23, 33: PRINT USING " NOW CALCULATING AT DAY ###.#######"; T;
8510 RETURN
8520 E = M + E0(J) * SIN(M) + .5 * (E0(J) * E0(J)) * SIN(2 * M)
8530 S3 = SIN(E): C3 = COS(E): R3 = 1 - E0(J) * C3: M1 = E - E0(J) * S3
8540 M5 = M1 - M: IF ABS(M5) < .000001 THEN 8560 ELSE E = E - M5 / R3
8550 GOTO 8530
8560 X0 = A0(J) * (C3 - E0(J)): Y0 = A0(J) * E1 * S3: R = A0(J) * R3
8570 X1 = X0 * CC(1, 1) + Y0 * CC(1, 2): Y1 = X0 * CC(2, 1) + Y0 * CC(2, 2): Z1 = X0 * CC(3, 1) + Y0 * CC(3, 2)
8580 G7 = T * G1 + G2: G7 = (G7 - INT(G7)) * P2: S7 = -SIN(G7): C7 = COS(G7)
8590 X = (X1 * C7) - (Y1 * S7): Y = (X1 * S7) + (Y1 * C7): Z = Z1
8600 X5 = (X - X9): Y5 = (Y - Y9): Z5 = (Z - Z9): R5 = SQR(X5 * X5 + Y5 * Y5 + Z5 * Z5)
8610 IF T6 <> T THEN R8 = ((R6 - R5) / (T6 - T)) / 86400! ELSE R8 = -9000000000#
8620 R6 = R5: T6 = T
8630 Z8 = (X5 * C8 * C9) + (Y5 * S8 * C9) + (Z5 * S9)
8640 X8 = -(X5 * C8 * S9) - (Y5 * S8 * S9) + (Z5 * C9): Y8 = (Y5 * C8) - (X5 * S8)
8650 S5 = Z8 / R5: C5 = SQR(1 - S5 * S5): E9 = ATN(S5 / C5) / P0
8660 IF X8 < 0 THEN A9 = P1 + ATN(Y8 / X8) ELSE 8680
8670 GOTO 8710
8680 IF X8 > 0 AND Y8 >= 0 THEN A9 = ATN(Y8 / X8) ELSE IF X8 > 0 THEN A9 = P2 + ATN(Y8 / X8) ELSE 8700
8690 GOTO 8710
8700 IF Y8 < 0 THEN A9 = 3 * P1 / 2 ELSE A9 = P1 / 2
8710 A9 = A9 / P0
8720 IF X < 0 THEN W5 = P1 + ATN(Y / X) ELSE 8740
8730 GOTO 8770
8740 IF X > 0 AND Y >= 0 THEN W5 = ATN(Y / X) ELSE IF X > 0 THEN W5 = P2 + ATN(Y / X) ELSE 8760
8750 GOTO 8770
8760 IF Y < 0 THEN W5 = 3 * P1 / 2 ELSE W5 = P1 / 2
8770 W5 = 360 - W5 / P0
8780 B5 = Z / R: L5 = ATN(B5 / (SQR(1 - B5 ^ 2))) / P0
8790 RETURN
8800 ' ****** DATE FROM DAY OF YEAR NUMBER ******
8810 '
8820 DD = 0
8830 YS = Y3(J)
8840 DN = DN - 31: IF DN <= 0 GOTO 9010
8850 IF YS = 88 GOTO 9140
8860 IF YS = 92 GOTO 9140
8870 IF YS = 96 GOTO 9140
8880 DN = DN - 28: IF DN <= 0 GOTO 9030
8890 DN = DN - 31: IF DN <= 0 GOTO 9040
8900 DN = DN - 30: IF DN <= 0 GOTO 9050
8910 DN = DN - 31: IF DN <= 0 GOTO 9060
8920 DN = DN - 30: IF DN <= 0 GOTO 9070
8930 DN = DN - 31: IF DN <= 0 GOTO 9080
8940 DN = DN - 31: IF DN <= 0 GOTO 9090
8950 DN = DN - 30: IF DN <= 0 GOTO 9100
8960 DN = DN - 31: IF DN <= 0 GOTO 9110
8970 DN = DN - 30: IF DN <= 0 GOTO 9120
8980 DN = DN - 31: IF DN <= 0 GOTO 9130
8990 YS = YS + 1
9000 GOTO 8840
9010 M$ = "JANUARY": DD = DN + 31: RETURN
9020 M$ = "FEBRUARY": DD = DN + 29: RETURN
9030 M$ = "FEBRUARY": DD = DN + 28: RETURN
9040 M$ = "MARCH": DD = DN + 31: RETURN
9050 M$ = "APRIL": DD = DN + 30: RETURN
9060 M$ = "MAY": DD = DN + 31: RETURN
9070 M$ = "JUNE": DD = DN + 30: RETURN
9080 M$ = "JULY": DD = DN + 31: RETURN
9090 M$ = "AUGUST": DD = DN + 31: RETURN
9100 M$ = "SEPTEMBER": DD = DN + 30: RETURN
9110 M$ = "OCTOBER": DD = DN + 31: RETURN
9120 M$ = "NOVEMBER": DD = DN + 30: RETURN
9130 M$ = "DECEMBER": DD = DN + 31: RETURN
9140 DN = DN - 29: IF DN <= 0 THEN 9020 ELSE 8890
9200 '***** STANDARDSUBROUTINE FÜR PRINTERTEST**********
9210 OKDRK$ = "O.K. PRINTER READY"
9220 NODRK$ = "PRINTER NOT READY ! "
9230 NOPAP$ = "NO PAPER ! "
9240 NOEIN$ = "PRINTER IS NOT SWITCHED ON ! "
9250 NODRA$ = "THERE IS NO PRINTER ADAPTER INSTALLED."
9260 NEUEIN$ = "CORRECT SITUATION AND REENTER"
9270 PRNTR = 1: DEF SEG = &H40
9280 DBAS = (PRNTR * 2) + 6
9290 IF PEEK(DBAS) = 0 THEN DRK$ = NODRA$: GOTO 9360
9300 STAT = INP(PEEK(DBAS) + PEEK(DBAS + 1) * 256 + 1) AND 224
9310 IF STAT = 192 THEN DRK$ = OKDRK$: DRKFLG = 0: RETURN'OK-AUSSTIEG
9320 IF STAT = 64 THEN DRK$ = NODRK$
9330 IF STAT = 96 THEN DRK$ = NOPAP$
9340 IF STAT = 128 THEN DRK$ = NOEIN$
9350 IF STAT = 224 THEN DRK$ = NOEIN$
9360 PLAY "MB O2 A8D8G8A8": DRKFLG = 1: RETURN'FEHLERCONDITION
9370 '***** ENDE SUBROUTINE DRUCKERTEST *******
9500 SOUND 990, 3: SOUND 32000, 1: SOUND 990, 1: SOUND 32000, 1: SOUND 990, 4: RETURN
9510 FOR ISI = 1 TO 8
9520 SOUND 990, 1: SOUND 32000, 1
9530 NEXT ISI: RETURN
10000 PRINT ERL, ERR
10010 STOP
10020 IF ERR = 53 THEN CLS : GOTO 10030 ELSE GOTO 10000
10030 IF ERL = 80 THEN PRINT "SATKEPN.DAT NOT FOUND": GOTO 10060
10040 IF ERL = 90 THEN PRINT "SATBODN.DAT NOT FOUND": GOTO 10060
10050 IF ERL = 100 THEN PRINT "SATMAP.DAT NOT FOUND"
10060 PRINT "Files SATKEPN, SATBODN and SATMAP must be in default drive !"
10070 PLAY "L3 O2 G L5 A L4 GFED L2 C" 'FEHLERCONDITION WO SIND...
10080 STOP